﻿using System;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using User.EF.Contracts;
using User.Web.Contracts.Model.Admin;
using User.Web.Models.Admin;
using User.Web.UI.Controllers.BaseControllers;
using User.Web.UI.Helper.RightsManagement;

namespace User.Web.UI.Controllers
{
   // [CustomWebApiAuthorize]
    public class AdminApiController : ControllerApiBase
    {
        #region Member
        /// <summary>
        /// User Repository für alle allgemeinen Abfragen fürs Web.
        /// </summary>
        private readonly IWebQuerySummary _webQueries;
        #endregion

        #region Initialize
        public AdminApiController(IWebQuerySummary webQueries)
        {
            if (webQueries == null)
            {
                throw new NullReferenceException("WebQuery is Null");
            }

            _webQueries = webQueries;
        }
        #endregion

        #region Api Calls
        /// <summary>
        /// Filtert die Mitarbeiterliste nach den übergebenen Modelfilterwerten
        /// </summary>
        /// <param name="model">Unsere Modeldaten nach denen gefiltert werden soll</param>
        public HttpResponseMessage MemberListFilter(MemberListFilterModel model)
        {
            if (model != null)
            {
                MemberListApiModel memberListApiModel = new MemberListApiModel();
                memberListApiModel.FilterMemberList(_webQueries, model);
                HttpResponseMessage response = Request.CreateResponse<MemberListApiModel>(HttpStatusCode.OK, memberListApiModel);
              //  response.Headers.Location = new Uri(Request.RequestUri, string.Format("/api/AdminApi/MemberListFilter/"));
                return response;
            }

            //Statuscode 400 Zurückgeben
            throw new HttpResponseException(HttpStatusCode.BadRequest);
        }

        /// <summary>
        /// Gibt alle Rechte für den Übergebenen Benutzer zurück.
        /// </summary>
        /// <param name="id">Die UserId für die die Rechte abgefragt werden sollen</param>
        public HttpResponseMessage MemberRightsGetAllRights(long id)
        {
            MemberRightApiModel memberRightApiModel = new MemberRightApiModel();
            memberRightApiModel.LoadRights(_webQueries, id);
            HttpResponseMessage response = Request.CreateResponse<MemberRightApiModel>(HttpStatusCode.OK, memberRightApiModel);
            response.Headers.Location = new Uri(Request.RequestUri, string.Format("/api/AdminApi/MemberRightsGetAllRights/"));
            return response;

            //Statuscode 400 Zurückgeben
            throw new HttpResponseException(HttpStatusCode.BadRequest);
        }

        /// <summary>
        /// Gibt OK zurück wenn das Recht erfolgreich entzogen wurde
        /// </summary>
        /// <param name="id">Die UserId für die die Rechte abgefragt werden sollen</param>
        /// <param name="rightId">Die RechteId die dem User entzogen werden soll</param>
        public HttpResponseMessage MemberRightsRemoveRight(long id, int rightId)
        {
            MemberRightApiModel memberRightApiModel = new MemberRightApiModel();
            memberRightApiModel.SetCommunication(Logger, AddMessage);
            if (memberRightApiModel.RemoveRight(_webQueries, id, rightId))
            {
                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
                response.Headers.Location = new Uri(Request.RequestUri, string.Format("/api/AdminApi/MemberRightsRemoveRight/"));
                return response;
            }

            //Statuscode 400 Zurückgeben
            throw new HttpResponseException(HttpStatusCode.InternalServerError);
        }

        /// <summary>
        /// Gibt OK zurück wenn das Recht erfolgreich hinzugefügt wurde
        /// </summary>
        /// <param name="id">Die UserId für die die Rechte abgefragt werden sollen</param>
        /// <param name="rightId">Die RechteId die dem User hinzugefügt werden soll</param>
        public HttpResponseMessage MemberRightsAddRight(long id, int rightId)
        {
            MemberRightApiModel memberRightApiModel = new MemberRightApiModel();
            memberRightApiModel.SetCommunication(Logger, AddMessage);
            if (memberRightApiModel.AddRight(_webQueries, id, rightId))
            {
                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
                response.Headers.Location = new Uri(Request.RequestUri, string.Format("/api/AdminApi/MemberRightsAddRight/"));
                return response;
            }

            //Statuscode 400 Zurückgeben
            throw new HttpResponseException(HttpStatusCode.InternalServerError);
        }
        #endregion
    }
}